Date.prototype.Format = function (fmt) {
    var o = {
        "M+": this.getMonth() + 1, //月份 
        "d+": this.getDate(), //日 
        "H+": this.getHours(), //小时 
        "m+": this.getMinutes(), //分 
        "s+": this.getSeconds(), //秒 
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度 
        "S": this.getMilliseconds(), //毫秒 
        "W": ["日", "一", "二", "三", "四", "五", "六"][this.getDay()] //星期 
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}
// 南丁格尔图渐变色
function gradient1(params) {
    const colorList = [
        ['#8CD8FF', '#0099EB'], // 分类A的渐变色
        ['#0B59F7', '#0B59F7'], // 分类B的渐变色
        ['#5DF2FA', '#00AEB8'], // 分类C的渐变色
        ['#63BEFF', '#63BEFF'], // 分类D的渐变色
        ['#6495ed', '#4169e1']  // 分类E的渐变色
    ];
    const color = colorList[params.dataIndex];
    return {
        type: 'linear',
        x: 0,
        y: 0,
        x2: 0,
        y2: 1,
        colorStops: [
            { offset: 0, color: color[0] }, // 颜色1
            { offset: 1, color: color[1] }  // 颜色2
        ],
        global: false
    };
}
// 南丁格尔图渐变色
function gradient2(params) {
    const colorList = [
        ['#0CCFEE', '#028CC9'], // 分类A的渐变色
        ['#4F12EC', '#7C4FFF'], // 分类B的渐变色
        ['#0B3DCB', '#0B3DCB'], // 分类C的渐变色
        ['#2DE1FD', '#0E5FFF'], // 分类D的渐变色
        ['#0056FF', '#3D7FFF']  // 分类E的渐变色
    ];
    const color = colorList[params.dataIndex];
    return {
        type: 'linear',
        x: 0,
        y: 0,
        x2: 0,
        y2: 1,
        colorStops: [
            { offset: 0, color: color[0] }, // 颜色1
            { offset: 1, color: color[1] }  // 颜色2
        ],
        global: false
    };
}
function gradient3(params) {
    const colorList = [
        ['#004978', '#0a7a6c'], // 分类A的渐变色
        ['#417c01', '#277866'], // 分类B的渐变色
        ['#333787', '#282b68'], // 分类C的渐变色
        ['#33388b', '#082d76'], // 分类D的渐变色
        ['#022b7a', '#22468d']  // 分类E的渐变色
    ];
    const color = colorList[params.dataIndex];
    return {
        type: 'linear',
        x: 0,
        y: 0,
        x2: 0,
        y2: 1,
        colorStops: [
            { offset: 0, color: color[0] }, // 颜色1
            { offset: 1, color: color[1] }  // 颜色2
        ],
        global: false
    };
}

const colorFuncList = [
    { 0: '#107FD4', 1: '#30E3EB' },
    { 0: '#2D39B2', 1: '#B87BFF' },
    { 0: '#0B3DCB', 1: '#2A9DFF' },
    { 0: '#2A9DFF', 1: '#2A9DFF' },
    { 0: '#107FD4', 1: '#30E3EB' },
    { 0: '#0B3DCB', 1: '#0B3DCB' },
    { 0: '#4F12EC', 1: '#7C4FFF' },
]
// 多色处理函数
function colorFunc(data, direction) {
    return data.map((item, index) => ({
        value: item.value,
        itemStyle: {
            color: direction === 'crosswise' 
            ? new echarts.graphic.LinearGradient(0, 0, 1, 0,
                    [
                        { offset: 0, color: colorFuncList[index][0] },
                        { offset: 1, color: colorFuncList[index][1] }
                    ]
                ) 
            : new echarts.graphic.LinearGradient(0, 0, 0, 1,
                    [
                        { offset: 0, color: colorFuncList[index][0] },
                        { offset: 1, color: colorFuncList[index][1] }
                    ]
                )
        }
    }));
}

// 人才结构
const Nightingale = {
    legend: {
        right: '0',
        textStyle: {
            fontSize: '.7rem',
            color: 'white' // 设置图例文字颜色为白色
        }
    },
    grid: {
        top: '14%',
        left: '-2%',
        right: '8%',
        bottom: '0',
        containLabel: true
    },
    xAxis: {
        type: 'value',
        textStyle: {
            fontSize: '.7rem',
            color: 'white' // 设置图例文字颜色为白色
        },
    },
    xAxis: {
        type: 'value',
        boundaryGap: [0, 0.01],
        axisLabel: {
            textStyle: {
                fontSize: '.7rem',
                color: 'white'
            },
            // formatter: '{value} 单位' // 在这里添加单位
        },
        splitLine: {
            show: true,
            lineStyle: {
                color: '#273970',
                width: 1,
                type: 'solid'
            }
        }
    },
    yAxis: {
        type: 'category',
        data: ['研究员', '副研究员', '讲师', '助教'],
        axisLabel: {
            textStyle: {
                fontSize: '.7rem',
                color: 'white'
            }
        },
        splitLine: {
            show: false,

        }
    },
    series: [
        {
            name: '类比',
            type: 'bar',
            data: [18203, 23489, 29034, 104970],
            itemStyle: {
                color: new echarts.graphic.LinearGradient(
                    0, 0, 1, 0,
                    [
                        { offset: 0, color: '#2D39B2 ' }, // 渐变色的起始颜色
                        // {offset: 0.5, color: '#188df0'}, // 中间颜色
                        { offset: 1, color: '#B87BFF ' } // 结束颜色
                    ]
                )
            }
        },
        {
            name: '占比',
            type: 'bar',
            data: [19325, 23438, 31000, 121594],
            itemStyle: {
                color: new echarts.graphic.LinearGradient(
                    0, 0, 1, 0,
                    [
                        { offset: 0, color: '#107FD4' }, // 渐变色的起始颜色
                        { offset: 1, color: '#30E3EB' } // 结束颜色
                    ]
                )
            }
        }
    ]
};
// 求职成功率
const JobWantedProb = {
    legend: {
        right: '0',
        textStyle: {
            fontSize: '.7rem',
            color: 'white' // 设置图例文字颜色为白色
        }
    },
    grid: {
        top: '14%',
        right: '0.5%',
        left: '0',
        bottom: '0',
        containLabel: true
    },
    xAxis: {
        type: 'category', // 类目轴
        data: ['AI', '大数据', '云计算', '物联网'],
        axisLabel: {
            textStyle: {
                fontSize: '.7rem',
                color: 'white'
            }
        },
        splitLine: {
            show: false
        }
    },
    yAxis: {
        type: 'value', // 数值轴
        axisLabel: {
            textStyle: {
                fontSize: '.7rem',
                color: 'white'
            }
        },
        splitLine: {
            show: true,
            lineStyle: {
                color: '#273970',
                width: 1,
                type: 'solid'
            }
        }
    },
    series: [
        {
            name: '专业',
            type: 'bar',
            data: [18, 23, 29, 1],
            barWidth: '18%',
            itemStyle: {
                color: new echarts.graphic.LinearGradient(
                    0, 0, 0, 1,
                    [
                        { offset: 0, color: '#2D39B2 ' },
                        { offset: 1, color: '#B87BFF ' }
                    ]
                )
            }
        },
        {
            name: '成功率',
            type: 'bar',
            data: [15, 8, 31, 94],
            barWidth: '18%',
            itemStyle: {
                color: new echarts.graphic.LinearGradient(
                    0, 0, 0, 1,
                    [
                        { offset: 0, color: '#107FD4' },
                        { offset: 1, color: '#30E3EB' }
                    ]
                )
            }
        }
    ]
}

// 行业热度
const Participants = (item) => {
    return {
        grid: {
            top: '5%',
            left: '1%',
            right: '1%',
            bottom: '0%',
            containLabel: true
        },
        xAxis: {
            type: 'category',
            data: item.title,
            axisLabel: {
                textStyle: {
                    fontSize: '.7rem',
                    color: 'white'
                }
            },
        },
        yAxis: {
            type: 'value',
            splitLine: {
                show: true,
                lineStyle: {
                    color: '#273970',
                    width: 1,
                    type: 'solid'
                }
            },
            axisLabel: {
                textStyle: {
                    fontSize: '.7rem',
                    color: 'white'
                }
            },
        },
        series: [
            {
                data: colorFunc(item.data, 'lengthways'),
                barWidth: '25%',
                type: 'bar'
            }
        ]
    }
};
// 紧缺岗位
const WeeklyVisitor = (item) => {
    const getMarkPointColor = (index) => {
        const color = colorFuncList[index][1];
        return color
    }
    const getSymbolSize = () => {
        return window.innerWidth / 100
    }
    return {
        grid: {
            top: '5%',
            left: '1%',
            right: '4%',
            bottom: '0',
            containLabel: true
        },
        xAxis: {
            type: 'value',
            splitLine: {
                show: true,
                lineStyle: {
                    color: '#273970',
                    width: 1,
                    type: 'solid'
                }
            },
            axisLabel: {
                textStyle: {
                    fontSize: '.7rem',
                    color: 'white'
                }
            },
        },
        yAxis: {
            type: 'category',
            data: item.title,
            axisLabel: {
                textStyle: {
                    fontSize: '.7rem',
                    color: 'white'
                }
            }
        },
        series: [
            {
                data: colorFunc(item.data, 'crosswise'),
                barWidth: '25%',
                type: 'bar',
                markPoint: {
                    symbol: 'circle', // 使用圆球作为标记
                    symbolSize: getSymbolSize, // 设置圆球的大小,
                    data: item.data.map((value, index) => {
                        return{ 
                            coord: [value.value, index],
                            itemStyle: {
                                color: getMarkPointColor(index),
                                shadowColor: getMarkPointColor(index)+'91',
                                borderWidth: 10,
                                borderRadius: 10,
                                shadowBlur: 20
                            }
                        }
                    })
                }
            }
        ]
    }
};
// 青春活力颜色生成函数
function getVibrantColor() {
    // 随机选择一个明亮的颜色
    const colors = [
        'rgb(255, 0, 0)',    // 红色
        'rgb(255, 165, 0)',  // 橙色
        'rgb(255, 255, 0)',  // 黄色
        'rgb(0, 255, 0)',    // 绿色
        'rgb(0, 0, 255)',    // 蓝色
        'rgb(75, 0, 130)',   // 靛蓝
        'rgb(238, 130, 238)',// 紫色
        'rgb(255, 192, 203)' // 粉色
    ];

    return colors[Math.floor(Math.random() * colors.length)];
}

function randomData() {
    return Math.round(Math.random() * 50000);
}
// 人才地图
const siteMapChinese = (data) => {
    return {
        tooltip: {
            trigger: 'item',
            formatter: (e => {
                // console.log(e);
                return e.name + ' : ' + e.value + '人'
            })
        },
        toolbox: {
            show: true,
            orient: 'vertical',
            left: 'right',
            top: 'center'
        },
        visualMap: {
            min: 0,
            max: Math.max(...data.map(item => item.value)),
            orient: 'horizontal', // 设置为横向
            right: '0', // 距离容器右侧 10%
            bottom: '7%', // 距离容器底部 10%
            realtime: false,
            calculable: true,
            inRange: {
                color: ['#0AC8FF', '#0A9CFF', '#1495FA']
            },
            textStyle: {
                fontSize: '.7rem',
                color: 'white'
            },
            seriesIndex: 0
        },
        select: {
            label: {
                show: true,
                color: '#273970',
                fontWeight: 'bolder',
                shadowColor: 'rgba(0, 0, 0, 0.5)',
                shadowBlur: 10,
                shadowOffsetX: 3,
                shadowOffsetY: 3
            },
            itemStyle:{
                areaColor: '#FF5F5F',
                shadowColor: 'rgba(0, 0, 0, 0.5)',
                shadowBlur: 10,
                shadowOffsetX: 8,
                shadowOffsetY: 8,
                borderColor: '#cccccc',
                borderWidth: 1,
            }
        },
        series: [
            {
                type: 'map',
                map: 'china',
                zoom: 1.7,
                center: [114.195397, 35.749953],
                label: {
                    // show: true, 
                    color: 'white',
                    fontSize: '.7rem',
                    fontWeight: 'bold'
                },
                itemStyle: {
                    normal: {
                        borderColor: '#ffffff',
                        borderWidth: '0.5rem',
                    },
                    emphasis: {
                        // focus: 'self',
                        areaColor: '#FF5F5F',
                        shadowColor: 'rgba(0, 0, 0, 0.5)',
                        shadowBlur: 10,
                        shadowOffsetX: 8,
                        shadowOffsetY: 8,
                        label: {
                            show: true,
                            color: 'white',
                            fontWeight: 'bolder',
                            shadowColor: 'rgba(0, 0, 0, 0.5)',
                            shadowBlur: 10,
                            shadowOffsetX: 3,
                            shadowOffsetY: 3
                        },
                    },
                    select: {
                        areaColor: '#FF5F5F',
                        shadowColor: 'rgba(0, 0, 0, 0.5)',
                        shadowBlur: 10,
                        shadowOffsetX: 8,
                        shadowOffsetY: 8,
                        borderColor: '#cccccc',
                        borderWidth: 1,
                    }
                },
                selectedMode: 'single', // 允许用户选中单个区域
                data
            }
        ]
    }
}
// 人才流动排名
const MobileTalents = (item) => {
    return {
        grid: {
            top: '10%',
            left: '0%',
            right: '1%',
            bottom: '0%',
            containLabel: true
        },
        xAxis: {
            type: 'category',
            data: item.title,
            axisLabel: {
                textStyle: {
                    fontSize: '.7rem',
                    color: 'white'
                }
            },
        },
        yAxis: {
            type: 'value',
            splitLine: {
                show: true,
                lineStyle: {
                    color: '#273970',
                    width: 1,
                    type: 'solid'
                }
            },
            axisLabel: {
                textStyle: {
                    fontSize: '.7rem',
                    color: 'white'
                }
            },
        },
        series: [
            {
                data: colorFunc(item.data, 'lengthways'),
                barWidth: '25%',
                type: 'bar'
            }
        ]
    }
}
// 人才地区排名
const RegionalRank = (data) => {
    return {
        tooltip: {
            trigger: 'item',
            formatter: '{a}-{b}<br\>{c}人 ({d}%)'
        },
        legend: {
            orient: 'vertical',
            top: 'center',
            left: '10%',
            textStyle: {
                fontSize: '.8rem',
                fill: '#ffffff',
                color: '#ffffff',
                rich: {
                    highlight: {
                        fontSize: '.9rem',
                        color: '#FFD41D',
                        fontWeight: 'bold'
                    }
                }
            },
            formatter: function (params) {
                const item = data.find(item => item.name === params);
                return `${params} ${item.value} {highlight|${item.rato}}`;
            }
        },
        series: [
            {
                name: '地区排名',
                type: 'pie',
                radius: ['40%', '90%'], // [20px, 140px] 转换为 [1.25rem, 8.75rem]
                center: ['80%', '50%'], // [75%, 50%]
                avoidLabelOverlap: false,
                itemStyle: {
                    color: (params) => gradient2(params)
                },
                label: {
                    show: true, // 显示标签
                    position: 'inside', // 标签位置在外部
                    formatter: function (params) {
                        const { data } = params;
                        // const item = data.find(item => item.name === params);
                        return `${data.rato}`;
                    },
                    textStyle: {
                        fontSize: '.8rem',
                        color: '#ffffff',
                        fontWeight: 'bold'
                    },
                    rich: {
                        time: {
                            fontSize: '1rem',
                            color: '#ffffff'
                        }
                    },
                    emphasis: {
                        show: true,
                        textStyle: {
                            fontSize: '.8rem',
                            fontWeight: 'bold'
                        }
                    }
                },
                data
            }
        ]
    }
}
// 职位需求趋势
const JobWantedTrend = {
    legend: {
        data: ['人工智能', 'AI'],
        left: 'right',
        textStyle: {
            fontSize: '.7rem',
            fill: '#ffffff',
            color: '#ffffff'
        },
    },
    grid: {
        top: '17%',
        left: '1%',
        right: '0%',
        bottom: '0%',
        containLabel: true
    },
    xAxis: {
        type: 'category',
        data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
        axisLabel: {
            textStyle: {
                fontSize: '.7rem',
                color: 'white'
            },
            // rotate: 45,       // 标签旋转45度
            interval: 0       // 间隔显示标签，0表示显示所有标签
        }
    },
    yAxis: {
        type: 'value',
        splitLine: {
            show: true,
            lineStyle: {
                color: '#273970',
                width: 1,
                type: 'solid'
            }
        },
        axisLabel: {
            textStyle: {
                fontSize: '.7rem',
                color: 'white'
            }
        }
    },
    series: [
        {
            name: '人工智能',
            data: [150, 230, 224, 218, 135, 147, 260, 150, 230, 224, 218, 135],
            type: 'line',
            showSymbol: false,
            lineStyle: {
                color: '#30E2EB',
                width: 4
            }
        },
        {
            name: 'AI',
            data: [50, 230, 324, 18, 35, 17, 26, 50, 230, 324, 18, 35],
            type: 'line',
            showSymbol: false,
            lineStyle: {
                color: '#B77CFF',
                width: 4
            }
        }
    ]
}
// 招聘趋势
const RecruitTrend = {
    legend: {
        data: ['人工智能', 'AI'],
        left: 'right',
        textStyle: {
            fontSize: '.8rem',
            fill: '#ffffff',
            color: '#ffffff'
        },
    },
    grid: {
        top: '17%',
        left: '1%',
        right: '0%',
        bottom: '0%',
        containLabel: true
    },
    xAxis: {
        type: 'category',
        data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
        axisLabel: {
            textStyle: {
                fontSize: '.7rem',
                color: 'white'
            },
            // rotate: 45,       // 标签旋转45度
            interval: 0       // 间隔显示标签，0表示显示所有标签
        }
    },
    yAxis: {
        type: 'value',
        splitLine: {
            show: true,
            lineStyle: {
                color: '#273970',
                width: 1,
                type: 'solid'
            }
        },
        axisLabel: {
            textStyle: {
                fontSize: '.7rem',
                color: 'white'
            }
        }
    },
    series: [
        {
            name: '人工智能',
            data: [150, 230, 224, 218, 135, 147, 260, 150, 230, 224, 218, 135],
            type: 'line',
            showSymbol: false,
            lineStyle: {
                color: '#30E2EB',
                width: 4
            }
        },
        {
            name: 'AI',
            data: [50, 230, 324, 18, 35, 17, 26, 50, 230, 324, 18, 35],
            type: 'line',
            showSymbol: false,
            lineStyle: {
                color: '#B77CFF',
                width: 4
            }
        }
    ]
}

// 获取年月日、时分、星期
function getFormattedDateTime(timestamp) {
    var d = new Date(timestamp); // 将时间戳转换为Date对象
    
    var year = d.getFullYear();
    var month = String(d.getMonth() + 1).padStart(2, '0');
    var day = String(d.getDate()).padStart(2, '0');
    var hours = String(d.getHours()).padStart(2, '0');
    var minutes = String(d.getMinutes()).padStart(2, '0');
    var seconds = String(d.getSeconds()).padStart(2, '0'); // 添加秒数
    var milliseconds = String(d.getMilliseconds()).padStart(3, '0'); // 添加毫秒数

    var dayOfWeek = d.getDay();
    var days = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];

    return {
        today: `${year}.${month}.${day}`,
        currentTime: `${hours}:${minutes}`,
        // hours: hours,
        // minutes: minutes,
        // seconds: seconds, // 返回秒数
        // milliseconds: milliseconds, // 返回毫秒数
        dayOfWeek: days[dayOfWeek]
    };
}

// 获取天气的公用方法
function getWeatherPROMISE(geocodeUrl) {
    return new Promise((resolve, reject) => {
        fetch(geocodeUrl, { headers: { 'Content-Type': 'application/json' } })
            .then(response => {
                if (!response.ok) {
                    throw new Error('网络响应错误');
                }
                return response.json();
            })
            .then(data => {
                const adcode = data.regeocode.addressComponent.adcode;
                // console.log(adcode);
                var weatherUrl = `https://restapi.amap.com/v3/weather/weatherInfo?output=json&key=f351fad35a447f5cba791c5412a330b1&city=${adcode}&extensions=all`;
                return fetch(weatherUrl);
            })
            .then(response => {
                if (!response.ok) {
                    throw new Error('网络响应错误');
                }
                return response.json();
            })
            .then(data => {
                // console.log(`天气状况: `, data.forecasts[0].casts);
                resolve(data.forecasts[0].casts);
                // control.value.casts = data.forecasts[0].casts;
            })
            .catch(error => {
                // 处理错误
                console.error(error);
            });
    });
}
// module.exports = {
//     Nightingale,
//     Participants,
//     WeeklyVisitor,
//     basicCourse,
//     featuredCourse,
//     radarMap,
//     praiseRadarMap,

//     siteMapChinese,
//     JobWantedProb,
//     MobileTalents
// }